#include "hdr.h"

int		ancho;
int		alto;
extern Rejilla* final;
extern int ejecutados;
extern int tPunto;
extern int ciclos;

void setWindow(float left, float right, float bottom, float top){
	glMatrixMode(GL_PROJECTION);
	glLoadIdentity();
	gluOrtho2D(left, right, bottom, top);
	}
	
void setViewport(int left, int right, int bottom, int top){
	glViewport(left, bottom, right - left, top - bottom);
	}

void dibujaCaracter(char caracter){
	glutBitmapCharacter(GLUT_BITMAP_HELVETICA_12, caracter);
	}

void dibujaNumero(int numero){
	char numeros[10] = { '0', '1', '2', '3', '4', '5', '6', '7', '8', '9' };
	int *vector;
	int counter=1, auxcont;
	int aux=numero, aux2=numero;
	
	if(numero>9){
		while(aux>9){
			aux = (int)aux/10;
			counter++;
			}

		vector = new int[counter];
		auxcont = counter;
		counter--;
		aux2=numero;

		do{
			aux = aux2%10;
			aux2=(int)aux2/10;
			vector[counter]=aux;
			counter--;
		}while(aux2>9);

	vector[counter] = aux2;

	for(int i=0; i<auxcont; i++){
		dibujaCaracter(numeros[vector[i]]);
		}
	}
	else
		dibujaCaracter(numeros[numero]);

	}

void miDibujo(){
	
	glClear(GL_COLOR_BUFFER_BIT);

	//final->drawan();

	int aux, aux2;
	
	unsigned char cadCiclo[6] = { 'C', 'i', 'c', 'l', 'o', ' ' };
	char cadDe[4] = { ' ','d', 'e', ' ' };
	char cadFin[3] = { 'F', 'i', 'n' };

	for(int i=0; i < final->getAlto(); i++){
		for(int j=0; j < final->getAncho(); j++){

			glBegin(GL_POINTS);

				if(final->getElemento(i,j)){
					glColor3f(1.0, 1.0, 1.0);
					}
				else{
					glColor3f(0.0, 0.0, 0.0);
					}

			glBegin(GL_POINTS);
				glVertex2i((j*tPunto)+tPunto/2, (((final->getAlto()-1)-i)*tPunto)+tPunto/2);
			glEnd();
			}
	}

	glColor3f(0.5, 0.5, 0.5);
	glRasterPos2i(10, 10);

	if(ciclos > ejecutados){
		
		for(int i=0; i<6; i++)
			dibujaCaracter(cadCiclo[i]);
		
		dibujaNumero(ejecutados);
		
		for(int i=0; i<4; i++)
			dibujaCaracter(cadDe[i]);
		
		dibujaNumero(ciclos);
		}
	else{
		for(int i=0;i<3; i++)
			dibujaCaracter(cadFin[i]);
		}

	glFlush();
	}

void menu(GLint entrada){
	switch (entrada){
		case 1:
			siguiente();
			break;
		case 2:
			glutReshapeWindow(ancho, alto);
			break;
		case 3:
			salir();
		}
	glutPostRedisplay();
	}

void crearMenu(void){
	glutCreateMenu(menu);
	glutAddMenuEntry("Siguiente", 1);
	glutAddMenuEntry("Restaurar la pantalla", 2);
	glutAddMenuEntry("Salir", 3);
	glutAttachMenu(GLUT_RIGHT_BUTTON);
	}

void miTeclado(GLubyte tecla, int x, int y){
	switch (tecla){
		case 'n':
			siguiente();
			break;
		case 's':
			salir();
		}
	glutPostRedisplay();
	}

void inicio(int argc, char **argv, int anc, int alt){
	ancho = anc;
	alto = alt;
	glutInit(&argc, argv);
	glutInitDisplayMode(GLUT_SINGLE | GLUT_RGB);
	glutInitWindowSize(anc, alt);
	glutInitWindowPosition(150, 150);
	glClearColor(0.0, 0.0, 0.0, 1.0);
	int principal = glutCreateWindow("PVM Conway");
	glutDisplayFunc(miDibujo);
	glutKeyboardFunc(miTeclado);
	crearMenu();
	setWindow(0.0, anc, 0.0, alt);
	glPointSize(tPunto);
	}

int calcTam(int an, int al){
	
	int max=50;
	int min=7;

	if(an >= al){
		if (an >= max-min)
			return min;
		else
			return max - an;
		}
	else if(an < al){
		if (al >= max-min)
			return min;
		else
			return max - al;
		}

	}

